/**
 * UserItem，用户条目，可以随时取出修改其中的条目
 */
#pragma once

#include "EventList.h"
#include "EventString.h"

/* 用户数据条目对象 */
typedef struct _UserItem UserItem;
#define USER_ITEM(any) ((UserItem *)any)

extern UserItem *user_item_new(void);

/**
 * 设置 UserItem 条目的密码。
 * 请注意，UserItem 对象将对 EventString 进行自动引用！
 */
extern void	    user_item_set_password(UserItem *, EventString *);
extern EventString *user_item_get_password(UserItem *);
extern bool user_item_compare_password(const UserItem *, const EventString *);

/**
 * 设置 UserItem 条目的用户名。
 * 请注意，UserItem 对象将对 EventString 进行自动引用！
 */
extern void user_item_set_user_name(UserItem *, EventString *);
/* 获取用户名 */
extern EventString *user_item_dup_user_name(UserItem *);

/**
 * 设置 UserItem 条目的 EventList。
 * 请注意，UserItem 对象将对 EventList 进行自动引用！
 */
extern void	  user_item_set_group_list(UserItem *, EventList *);
extern EventList *user_item_get_group_list(UserItem *);
//
extern void    user_item_set_phone(UserItem *, euint64);
extern euint64 user_item_get_phone(UserItem *);
extern void    user_item_set_user_id(UserItem *, euint32);
extern euint32 user_item_get_user_id(UserItem *);

/**
 * 向用户条目中添加一条事件组信息(表示用户已加入该事件组)
 */
extern void user_item_add_group_id(UserItem *self, euint32 group_id);

/**
 * @brief 从用户条目中移除一条事件组条目。请注意！需要保证 UserItem 存在，
 *        本方法不会检查 UserItem 的正确性
 */
extern void user_item_remove_group_id(UserItem *self, euint32 group_id);

//
extern void __user_item_print(UserItem *);
